<?php
/**
 * admin 模型类
 * User 1874
 */

namespace app\adminplatform\model;

use think\facade\Request;
use think\facade\Session;
use think\Model;

class Admin extends Model {
    /**
     * 关联城市
     */
    public function city(){
        return $this->hasOne(City::class, "ci_id", "ad_cityId");
    }
    /**
     * 关联角色
     */
    public function role(){
        return $this->hasOne(AuthGroup::class, "ag_id", "ad_role");
    }
    /*
     * 获取管理员分页
     * @param array $map 查询条件
     * @param array $query 搜索参数 Request::param()
     */
    public static function getAdminPage(array $map=[]){

        return Admin::where($map)->withJoin(['city', 'role'], 'left')
            ->field('ad_id,ad_name,ad_role,ad_phone,ad_cityId,ad_status,ag_id,ag_name')
            ->order('ad_id DESC')->paginate(["list_rows"=>PageNum,'query'=>Request::param()])
            ->each(function($item){
                //获取管理员的省市县
                $item['cityInfo'] = City::getParentCityAll($item['ad_cityId']);
                return $item;
            });
    }

    /*
     * 获取单个管理员信息
     * @param array $map 查询条件
     * @param int $type 查询方法类型
     */
    public static function getAdminInfo(array $map=[], int $type=0){

        if($type == 0) {
            return Admin::where($map)->field('ad_id,ad_name,ad_role')->find();
        }elseif($type == 1){
            return Admin::where($map)->count("ad_id");
        }else{
            return Admin::where($map)->alias('a')->join('auth_group b','a.ad_role=b.ag_id','left')
                ->field('ad_id,ad_name,ad_headerImg,ad_userNum,ad_cityId,ad_phone,ad_headImg,ad_status,ad_addTime,ag_id,ag_name')->find();
        }
    }
    /*
     * 批量获取管理员某列数据
     * @param array $map 查询条件
     * @param string $filed 查询字段名
     */
    public static function getAdminColumn(array $map=[], string $filed){

        return Admin::where($map)->column($filed);
    }
    /*
     * 管理员登录验证处理
     * @param array $map 查询条件
     */
    public static function loginCheck(array $map=[]){
        //传入模型验证管理员
        $info = Admin::where($map)->field("ad_id,ad_name,ad_role,ad_userNum,ad_status")->findOrEmpty()->toArray();
        //验证账户密码
        if($info){
            //不是超级管理员
            if($info['ad_role'] > 0){
                //查询该角色是否被禁用
                $status = AuthGroup::getGroupStatus($info['ad_role']);
                if($status == 0){
                    return ['info'=>'您所在角色组已被禁用，请联系上级管理员', 'status'=>0];
                }
                //管理员是否被禁用
                if($info['ad_status'] == 0){
                    return ['info'=>'您已被禁用，请联系上级管理员', 'status'=>0];
                }
            }
            //获取session_id
            $info['sessionId'] = Session::getId();
            //保存session
            Session::set('userData', $info);
            //创建一个唯一id数组作为唯一登录检测，如果没有此redis值就创建一个数组
            setOnlyLogin($info);
            //写入操作日志
            Log::logAdd($info['ad_id'], "登录管理平台");
            //返回信息
            $data = ['info'=>'欢迎您'.$info['ad_name'], 'status'=>1,'url'=> (string)url('Index/index')];
        }else{
            $data = ['info'=>'用户名或密码错误', 'status'=>0];
        }

        return $data;
    }
}